{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "intro",
   "metadata": {},
   "source": [
    "# Collections (Συλλογές)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "concepto",
   "metadata": {},
   "source": [
    "## Βήμα 1: Εισαγωγή\n",
    "Στην Python, οι συλλογές είναι ένας τρόπος αποθήκευσης πολλαπλών τιμών σε μία μόνο μεταβλητή. Είναι χρήσιμα όταν χρειάζεται να χειριστείτε περισσότερα από ένα κομμάτια δεδομένων ταυτόχρονα. Υπάρχουν διαφορετικοί τύποι συλλογών, ο καθένας εξυπηρετεί διαφορετικούς σκοπούς."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "tipos-lista",
   "metadata": {},
   "source": [
    "Η Python παρέχει διάφορους ενσωματωμένους (built-in) τύπους συλλογών:\n",
    "- **Lists** (`list`): Ταξινομημένες και μεταβλητές συλλογές. Μπορείτε να τις τροποποιήσετε μετά τη δημιουργία.\n",
    "- **Tuples** (`tuple`): Ταξινομημένες, αλλά αμετάβλητες συλλογές. Μόλις δημιουργηθούν, δεν μπορείτε να αλλάξετε τα στοιχεία τους.\n",
    "- **Sets** (`set`): Μη ταξινομημένες συλλογές που δεν μπορούν να έχουν διπλότυπες τιμές.\n",
    "- **Dictionaries** (`dict`): Αποθηκεύστε δεδομένα σε ζεύγη κλειδιών-τιμών, καθιστώντας εύκολη την ανάκτηση πληροφοριών με βάση ένα κλειδί."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "list",
   "metadata": {},
   "source": [
    "## Βήμα 2: Lists\n",
    "Μια λίστα είναι μια συλλογή που είναι ταξινομημένη (διατηρείται η σειρά των στοιχείων) και μεταβλητή (μπορείτε να αλλάξετε το περιεχόμενό της). Μπορείτε να προσθέσετε, να αφαιρέσετε ή να τροποποιήσετε στοιχεία σε μια λίστα.\n",
    "Ακολουθεί ένα παράδειγμα όπου δημιουργούμε μια λίστα με φρούτα και εκτελούμε ορισμένες λειτουργίες σε αυτήν:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "codigo-list",
   "metadata": {},
   "outputs": [],
   "source": [
    "fruits = ['apple', 'banana', 'cherry']\n",
    "# Πρόσβαση στο πρώτο στοιχείο στη λίστα\n",
    "print(fruits[0])  # Output: apple\n",
    "# Προσθήκη νέου στοιχείου στη λίστα\n",
    "fruits.append('orange')\n",
    "# Η λίστα είναι ανανεωμένη\n",
    "print(fruits)  # Έξοδος: ['apple', 'banana', 'cherry', 'orange']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "tuple",
   "metadata": {},
   "source": [
    "## Βήμα 3: Tuples (Πλειάδες)\n",
    " Μια πλειάδα είναι σαν μια λίστα, αλλά είναι **αμετάβλητη**. Μόλις δημιουργήσετε μια πλειάδα, δεν μπορείτε να αλλάξετε το περιεχόμενό της. Αυτό είναι χρήσιμο για την αποθήκευση δεδομένων που δεν πρέπει να τροποποιηθούν.\n",
    "Σε αυτό το παράδειγμα, ορίζουμε μια πλειάδα και έχουμε πρόσβαση στα στοιχεία της:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "codigo-tuple",
   "metadata": {},
   "outputs": [],
   "source": [
    "coordinates = (10, 20)\n",
    "# Πρόσβαση στο 2ο μέλος της πλειάδας\n",
    "print(coordinates[1])  # Έξοδος: 20"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "set",
   "metadata": {},
   "source": [
    "## Βήμα 4: Sets\n",
    "Ένα σετ είναι μια μη ταξινομημένη συλλογή μοναδικών στοιχείων. Τα σύνολα δεν επιτρέπουν διπλότυπες τιμές, επομένως αν προσπαθήσετε να προσθέσετε το ίδιο αντικείμενο δύο φορές, θα εμφανιστεί μόνο μία φορά.\n",
    "Στο παρακάτω παράδειγμα, ορίζουμε ένα σύνολο και βλέπουμε πώς αφαιρούνται αυτόματα τα διπλότυπα:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "codigo-set",
   "metadata": {},
   "outputs": [],
   "source": [
    "unique_numbers = {1, 2, 3, 3, 4}\n",
    "# Οι διπλοτιμές αφαιρούνται αυτόματα όταν δημιουργούμε το σύνολο\n",
    "print(unique_numbers)  # Έξοδος: {1, 2, 3, 4}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dict",
   "metadata": {},
   "source": [
    "## Βήμα 5: Dictionaries (Λεξικά)\n",
    "Τα λεξικά είναι συλλογές που αποτελούνται από **ζεύγοι κλειδιών-τιμών**. Κάθε στοιχείο σε ένα λεξικό έχει ένα κλειδί και μια σχετική τιμή. Χρησιμοποιούνται όταν χρειάζεται να αποθηκεύσετε δεδομένα και να τα ανακτήσετε γρήγορα χρησιμοποιώντας το κλειδί.\n",
    "Στο παρακάτω παράδειγμα, ορίζουμε ένα λεξικό για την αποθήκευση του ονόματος και της ηλικίας ενός ατόμου:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "codigo-dict",
   "metadata": {},
   "outputs": [],
   "source": [
    "person = {'name': 'Alice', 'age': 25}\n",
    "# Πρόσβαση στην τιμή που σχετίζεται με το κλειδί \"name\".\n",
    "print(person['name'])  # Έξοδος: Alice"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ejercicio",
   "metadata": {},
   "source": [
    "## Βήμα 6: Ασκήσεις\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ejercicio-2",
   "metadata": {},
   "source": [
    "### Άσκηση 1: Αντιστρέψτε μια λίστα\n",
    "Γράψτε ένα πρόγραμμα που δημιουργεί μια λίστα με τους αγαπημένους σας αριθμούς και αντιστρέφει τη σειρά της λίστας.\n",
    "Συμβουλή: Χρησιμοποιήστε τη μέθοδο «reverse()» για να αντιστρέψετε τη λίστα στη θέση της."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ejercicio-3",
   "metadata": {},
   "source": [
    "### Άσκηση 2: Πλειάδες\n",
    "Γράψτε ένα πρόγραμμα που να δημιουργεί μια πλειάδα με μερικά στοιχεία και να εκτυπώνει το δεύτερο στοιχείο της πλειάδας.\n",
    "Υπόδειξη: Θυμηθείτε ότι η δημιουργία ευρετηρίου ξεκινά από το 0, επομένως το δεύτερο στοιχείο έχει δείκτη «1»."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.x"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
